import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Date;
//创建一个用户账号类
class UserInfo {
    private String id; // 账号
    private String name; // 姓名
    private Date createDate;  // 开户时间
    private String idByCard; // 身份证号
    private  long money;// 初始余额
    // 无参构造方法
    public UserInfo() {	}
    // 有参构造方法
    public UserInfo(String _id, String _name, Date _createDate, String _idByCard, long _money) {
        this.id = _id;//引用成员变量
        this.name = _name;
        this.createDate = _createDate;
        this.idByCard = _idByCard;
        this.money = _money;
    }
   //调用该方法可以实现存款account进账户
    public long AddMoney(long amount){
        money=amount+money;
        return  money;
    }
//调用该方法可以实现从账户取出account
    public long DepositMoney(long amount) {
        money= money-amount;
        return  money;
    }
    //调用该方法实现获取当前money数值
    public long GetMoney() {
        return  this.money;
    }

    // 打印人员信息
    public void showUserInfo() {
        System.out.println("账号: " + id);
        System.out.println("姓名: " + name);
        System.out.println("开户时间: " + createDate);
        System.out.println("身份证号: " + idByCard);

    }
}
//创建主类银行账户
public class BankAccount{
//创建UserInfo对象，并给予初始属性name、date、card、money=1234.
    public static void main(String args[]){
        UserInfo user=new UserInfo("1","Java",new Date(109,1,1),"1111",1234);
        BankAccount b=new BankAccount();
        b.operate(user);//对对象user进行操作
    }
    //创建方法operate,参数为user
    public  void operate(UserInfo user){
        long saveMoney=0;// 定义存款变量
        long takeMoney=0;// 定义取款变量，进行存款取款操作时的输入值
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));// 输入流
        String choose="";// 定义选择菜单的变量
        while (true) {
            System.out.println("请选择要进行的操作:1.存款 2.取款 3.查询 4.显示账户 5.退出");
            try {
                choose = br.readLine();// 读取字符
            }
            catch (IOException e) {
                e.printStackTrace();//异常的一个对象，抓到的异常信息都保存在e里
            }//捕捉错误，将错误储存在堆栈“e”中

            // 存款
            if (choose.compareTo("1") == 0) {
                while (true) {
                    System.out.println("请输入要存储的金额(整数)：");
                    try {
                        saveMoney = Long.parseLong(br.readLine());//读取键盘输入内容
                    } //错误处理
                    catch (NumberFormatException e) {//如果输入的不是数字，显示以下内容并重新输入
                        System.out.println("输入错误,请输入整数");
                        continue;
                    } catch (IOException e) {    }
                    long balance=user.AddMoney(saveMoney);//调用方法AddMoney，将saveMoney传给try中的对象，即balance=money+savemoney
                    System.out.println("存款成功!已存入" + saveMoney + "元" + "可用余额为"+ balance + "元");
                    break;
                }
            }
            // 取款
            if (choose.equals("2")) {
                while (true) {
                    System.out.println("请输入要取款的金额(整数)：");
                    try {
                        takeMoney = Long.parseLong(br.readLine());
                    } catch (NumberFormatException e) {
                        System.out.println("输入错误,请输入整数");
                        continue;
                    } catch (IOException e) {  }
                    if (!(user.GetMoney() < takeMoney)) {
                        long balance=user.DepositMoney(takeMoney);
                        System.out.println("取款成功!已取出" + takeMoney + "元." + "余额为" + balance + "元");
                        break;
                    } else {
                        System.out.println("余额不足,请重新输入:");
                    }
                }
            }

            // 查询
            if (choose.compareTo("3") == 0) {
                System.out.println("你的余额为" + user.GetMoney() + "元;");//输出对象money数值
            }
            // 显示账户
            if (choose.compareTo("4") == 0) {
                user.showUserInfo();
            }
            // 输入5为退出
            if (choose.equals("5")) {
                System.out.println("程序退出");
                System.exit(0);
            }

        }
    }
}
